2 列表、字典和元组
2.1 引言Python复合数据类型概述
在金融数据分析中,我们经常需要处理成组的相关数据。Python提供了三种内置的复合数据类型:列表(List)、字典(Dictionary)和元组(Tuple)。这些类型使得数据的组织和操作变得更加高效和直观。
2.2 本章学习目标
通过本章学习,你将能够:
- 创建列表、字典、元组,并根据”有序可变、键值查找、不可变”的特征为金融数据(持仓清单、股票信息、固定配置)选择合适的结构
- 使用
append()、remove()、len()、enumerate()动态维护投资组合列表 - 使用键访问、
update()与in运算读写字典,并解释字典 O(1) 查找的哈希原理与键必须不可变的限制 - 对元组执行索引与切片,说出不可变性对哈希支持与数据完整性的意义
- 区分浅拷贝与深拷贝,判断嵌套结构的修改是否会波及副本
先修:章节 1(第1章 常用基本数据类型)
2.3 列表(List)
列表是Python中最常用的数据结构之一,它是可变的(Mutable)、有序的(Ordered)序列。在金融应用中,列表常用于存储时间序列数据、投资组合成分等。
2.3.1 列表的创建与基本操作
任务要求:创建一个混合类型列表 x,元素依次为字符串 'finance'、'risk management'、'金融风险管理' 和数值 8.88,并用 print() 整体输出该列表。请将代码原样输入教学平台(注释除外),判定以平台为准。
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#列表应用
x=['finance','risk management','金融风险管理',8.88]
print(x) # 输出混合类型列表的内容(含字符串、数值等多种数据类型)预期输出(本机 Python 实际运行结果,具体以平台运行结果为准):['finance', 'risk management', '金融风险管理', 8.88](方括号、引号与小数均为 print 列表的标准显示形式)。
代码深度解析:
列表的异构性: Python列表可以包含不同类型的元素,这在金融数据预处理中非常有用。例如,可以将股票代码(字符串)、价格(浮点数)和成交量(整数)存储在同一个列表中。
内存模型: 列表存储的是对象的引用而非对象本身。这意味着:
- 修改可变对象会影响所有引用它的列表
- 列表赋值是浅拷贝(Shallow Copy)
时间复杂度分析:
x[i]: O(1) - 直接索引访问x[a:b]: O(k) - k为切片长度len(x): O(1) - 列表对象存储长度信息x.append(item): 均摊O(1) - 动态数组扩容
2.3.2 列表在金融投资组合中的应用
# =============================================================================
# 题目:管理股票投资组合
# =============================================================================
# 本任务演示如何使用列表存储和管理投资组合中的股票代码
# 列表的可变性使得我们可以动态添加、删除持仓股票
# ==================== 创建初始投资组合 ====================
portfolio = ['600519.SH', '000858.SZ', '600036.SH', '000002.SZ'] # 存储股票代码列表
# 这些是A股市场的股票代码格式:
# 6位数字.SH(上海证券交易所)或.SZ(深圳证券交易所)
# ==================== 添加新股票到投资组合 ====================
portfolio.append('601318.SH') # 在列表末尾添加元素:'601318.SH'(中国平安)
# append()方法直接修改原列表,不返回新列表
# 时间复杂度:均摊O(1),大多数情况下非常快
# ==================== 从投资组合中移除股票 ====================
portfolio.remove('000002.SZ') # 移除指定的元素:'000002.SZ'(万科A)
# remove()方法删除第一个匹配的元素
# 如果元素不存在会抛出ValueError异常
# 时间复杂度:O(n),需要遍历查找
# ==================== 统计持仓股票数量 ====================
holdings = len(portfolio) # 计算列表长度:4
print(f"当前持仓股票数量: {holdings}") # 输出:当前持仓股票数量: 4
# f-string是Python 3.6+的格式化字符串,用{}插入变量值
# ==================== 遍历投资组合 ====================
print("当前持仓:") # 输出标题
for i, stock in enumerate(portfolio, start=1): # 遍历列表,同时获取索引和元素
print(f" {i}. {stock}") # 格式化输出:序号. 股票代码
# enumerate()函数返回(索引, 元素)对
# start=1参数让索引从1开始而不是02.4 字典(Dictionary)
字典是Python中最重要的数据结构之一,它是可变的、无序的(Python 3.7+保持插入顺序)键值对(Key-Value Pair)集合。在金融应用中,字典非常适合存储结构化数据,如股票信息、交易记录等。
2.4.1 字典的创建与基本操作
任务要求:创建字典 dict1,用”指数名称、证券代码、交易日期、涨跌幅”四个键存储沪深300指数的信息(名称 '沪深300'、代码 '000300'、日期 '2022-09-14'、涨跌幅 0.42),并用 print() 整体输出该字典。判定以平台为准。
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#字典应用
dict1={'指数名称':'沪深300',
'证券代码':'000300', # 沪深300指数的证券代码
'交易日期':'2022-09-14', # 交易日期
'涨跌幅':0.42 # 当日涨跌幅(百分比)
} # 创建沪深300指数信息字典
print(dict1) # 输出沪深300指数信息字典预期输出(本机 Python 实际运行结果,具体以平台运行结果为准):{'指数名称': '沪深300', '证券代码': '000300', '交易日期': '2022-09-14', '涨跌幅': 0.42}(以花括号显示的键值对形式)。
代码深度解析:
哈希表的实现原理: Python字典底层使用哈希表(Hash Table)实现:
- 通过
hash(key)计算哈希值 - 哈希值决定存储位置(桶)
- 处理哈希冲突:开放寻址法或链地址法
这使得字典的查找、插入和删除操作的平均时间复杂度为O(1)。
- 通过
键的要求:
- 必须是不可变类型(int, float, str, tuple)
- 不能是可变类型(list, dict, set)
- 原因:可变对象的哈希值会变化,破坏字典结构
时间复杂度分析:
d[key]: 平均O(1), 最坏O(n)(哈希冲突时)d.get(key): 平均O(1)key in d: 平均O(1)d.items(): O(n)
2.4.2 字典在股票信息管理中的应用
# =============================================================================
# 题目:存储和操作股票信息
# =============================================================================
# 本任务演示如何用字典存储股票的多维信息,并进行计算和更新操作
# 字典非常适合存储结构化数据,如股票的代码、名称、价格、成交量、流通股本等
# ==================== 创建股票信息字典 ====================
stock_info = {
'code': '600519.SH', # 股票代码(贵州茅台)
'name': '贵州茅台', # 股票名称
'price': 1850.00, # 股价(元)
'volume': 2500000, # 成交量(股)
'float_share': 1256197800, # 流通股本(股)
'turnover': 4625000000.00 # 成交额(元)
}
# ==================== 计算换手率 ====================
turnover_rate = stock_info['volume'] / stock_info['float_share'] * 100 # 计算换手率(%)
# 换手率 = 成交量 / 流通股本 × 100
# 换手率反映股票的流动性,换手率高说明交易活跃
print(f"换手率: {turnover_rate:.2f}%") # 输出:换手率: 0.20%
# :.2f表示保留2位小数的浮点数格式化
# ==================== 更新股价 ====================
stock_info['price'] = 1860.00 # 修改键'price'对应的值
# 字典是可变的,可以直接修改键值对
# 如果键不存在,会添加新的键值对
# ==================== 添加新字段 ====================
stock_info['PE_ratio'] = 45.5 # 添加市盈率字段
# 市盈率(P/E)是股票估值的重要指标
# PE_ratio = 股价 / 每股收益
# ==================== 检查字段是否存在 ====================
if 'market_cap' in stock_info: # 检查键'market_cap'是否在字典中
print(f"市值: {stock_info['market_cap']}") # 如果存在则输出市值
else:
print("市值信息缺失") # 如果不存在则输出提示信息
# in运算符用于检查键是否存在于字典中,时间复杂度O(1)
# ==================== 批量更新字段 ====================
stock_info.update({
'price': 1870.00, # 更新股价为1870元
'volume': 2600000 # 更新成交量为260万股
})
# update()方法可以批量更新字典
# 参数是一个字典,包含要更新的键值对
# 如果键已存在则更新,不存在则添加补充说明:字典视图对象
dict.keys(), dict.values(), dict.items()返回的是视图对象(View Objects),它们:
- 是动态的:反映字典的实时变化
- 支持集合操作:交集、并集等
- 不能直接索引:需转换为list
# =============================================================================
# 题目:演示字典视图对象的集合操作
# =============================================================================
# 字典视图对象支持类似集合的操作,如交集、并集等
# 这在比较两个字典的键或值时非常有用
# ==================== 创建两个字典 ====================
dict_a = {'a': 1, 'b': 2, 'c': 3} # 字典A
dict_b = {'b': 2, 'c': 3, 'd': 4} # 字典B
# ==================== 计算键的交集 ====================
common_keys = dict_a.keys() & dict_b.keys() # 使用&运算符计算交集
print(common_keys) # 输出:{'b', 'c'}
# 交集是两个字典共有的键:'b'和'c'
# 字典视图支持集合运算符:&(交集)、|(并集)、-(差集)、^(对称差)
# ==================== 计算值的交集 ====================
common_values = set(dict_a.values()) & set(dict_b.values()) # 将值转为集合后再计算交集
print(common_values) # 输出:{2, 3}
# 两个字典都有值2和3
# 注意:dict.values()不直接支持集合运算,需先转换为set2.5 元组(Tuple)
元组是不可变的(Immutable)有序序列。在金融应用中,元组常用于存储固定配置、数据库记录返回值等。
2.5.1 元组的创建与基本操作
任务要求:创建元组 tup=('finance','风险管理',2022,88.88),输出其切片 tup[1:3](即索引 1、2 两个元素组成的新元组)。判定以平台为准。
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#元组应用
tup=('finance','风险管理',2022,88.88)
print(tup[1:3]) # 输出元组切片(索引1到2的元素:'风险管理'和2022)预期输出(本机 Python 实际运行结果,具体以平台运行结果为准):('风险管理', 2022)(切片返回的仍是元组,用圆括号显示)。
代码深度解析:
- 不可变性的意义:
- 线程安全: 多线程环境下无需加锁
- 哈希支持: 可作为字典键或集合元素
- 性能优化: Python可以进行内存优化
- 数据完整性: 防止意外修改
- 命名元组(NamedTuple): 标准元组只能通过索引访问,降低了代码可读性。
collections.namedtuple提供了命名字段的元组:
# =============================================================================
# 题目:使用命名元组存储股票信息
# =============================================================================
# 命名元组是元组的子类,允许通过属性名而不是索引访问元素
# 这使得代码更可读、更易维护
# ==================== 导入namedtuple ====================
from collections import namedtuple # 从collections模块导入namedtuple工厂函数
# ==================== 定义命名元组类型 ====================
Stock = namedtuple('Stock', ['code', 'name', 'price', 'volume'])
# namedtuple(类型名, 字段名列表)
# 返回一个新的类型类Stock,可以创建实例
# 字段名列表也可以是用空格或逗号分隔的字符串:'code name price volume'
# ==================== 创建命名元组实例 ====================
stock = Stock('600519.SH', '贵州茅台', 1850.00, 2500000)
# Stock类型构造函数接受4个参数,对应4个字段
# ==================== 通过字段名访问(更直观)====================
print(stock.name) # 输出:'贵州茅台'
# 可以像访问对象属性一样使用.语法访问字段
# 这比使用索引stock[1]更清晰
print(stock.price) # 输出:1850.0
# 不需要记住字段的位置顺序
# ==================== 仍然支持索引访问 ====================
print(stock[0]) # 输出:'600519.SH'
# 命名元组仍然是元组,支持所有元组操作
# 这保证了向后兼容性- 时间复杂度:
- 与列表相同,但列表底层是可动态扩容的数组,而元组是长度固定的不可变序列,创建后不再动态调整大小
t[i]: O(1)t[a:b]: O(k)
2.6 数据类型选择指南
在金融编程中,选择合适的数据类型至关重要:
理论背景:数据结构的选择
要做出正确的选择,先要理解这三种类型在计算机科学层面代表了不同的抽象层次:
- 列表: 动态数组,提供O(1)的随机访问和O(n)的插入/删除
- 字典: 哈希表(Hash Table),提供平均O(1)的查找、插入和删除
- 元组: 不可变序列,适用于存储固定配置和作为字典键
选择合适的数据结构对程序性能有决定性影响,尤其是在处理大规模金融数据时。
表:数据类型选择决策表
| 场景 | 推荐类型 | 理由 | 示例 |
|---|---|---|---|
| 时间序列数据 | 列表/NumPy数组 | 有序、可变 | 股价历史 |
| 键值对数据 | 字典 | 快速查找 | 股票信息 |
| 固定配置 | 元组 | 不可变、安全 | 交易参数 |
| 去重数据 | 集合 | 自动去重 | 唯一股票代码 |
| 矩阵运算 | NumPy数组 | 高性能数值计算 | 相关性矩阵 |
补充说明:性能考虑
在处理大规模金融数据时,性能差异变得显著:
# =============================================================================
# 题目:比较列表和字典的查找性能
# =============================================================================
# 本任务通过实验演示列表和字典在查找操作上的性能差异
# 列表查找是O(n),字典查找是O(1),在大数据量时差异巨大
# ==================== 导入时间模块 ====================
import time # Python标准库,用于时间相关操作
# ==================== 生成测试数据 ====================
n = 1000000 # 数据量:100万元素
test_list = list(range(n)) # 创建包含0到999999的列表
test_dict = {i: f"value_{i}" for i in range(n)} # 创建字典,键是0到999999
# 字典推导式:{key: value for key in iterable}
# 每个键对应的值是字符串"value_<key>"
# ==================== 测试列表查找性能(O(n))====================
start = time.time() # 记录开始时间
result = 999999 in test_list # 在列表中查找999999,需要遍历整个列表
list_time = time.time() - start # 计算耗时
# in运算符对列表需要逐个比较,平均需要检查n/2个元素
# ==================== 测试字典查找性能(O(1))====================
start = time.time() # 记录开始时间
result = 999999 in test_dict # 在字典中查找999999,通过哈希直接定位
dict_time = time.time() - start # 计算耗时
# 字典通过哈希表实现,查找时间几乎不随数据量增长
# ==================== 输出性能对比结果 ====================
print(f"列表查找时间: {list_time:.6f}秒") # 输出列表查找耗时
print(f"字典查找时间: {dict_time:.6f}秒") # 输出字典查找耗时
speedup_ratio = list_time / dict_time if dict_time > 0 else float('inf') # 防止除零错误
print(f"性能提升: {speedup_ratio:.1f}倍" if speedup_ratio != float('inf') else "性能提升: 字典查找时间趋近于零,提升倍数极大") # 输出性能提升倍数
# 在100万元素下,字典通常比列表快数千倍甚至上万倍2.7 深拷贝与浅拷贝
理解Python的拷贝机制对避免数据污染错误至关重要:
# =============================================================================
# 题目:演示浅拷贝和深拷贝的区别
# =============================================================================
# 浅拷贝只复制外层容器,内层对象仍然共享
# 深拷贝递归复制所有层级,完全独立
# 这对于处理嵌套数据结构(如投资组合列表)非常重要
# ==================== 导入copy模块 ====================
import copy # Python标准库,提供拷贝操作
# ==================== 创建原始嵌套列表 ====================
portfolio = [
['600519.SH', 100, 1850.00], # 持仓1:股票代码、持有数量、成本价
['000858.SZ', 200, 85.50] # 持仓2:股票代码、持有数量、成本价
]
# 这是一个嵌套列表:外层是列表,内层每个元素也是列表
# 类似二维数组或矩阵结构
# ==================== 创建浅拷贝 ====================
portfolio_shallow = portfolio.copy() # copy()方法创建浅拷贝
# 或者使用切片:portfolio_shallow = portfolio[:]
# 浅拷贝创建新列表,但内层列表元素仍然是引用
# ==================== 创建深拷贝 ====================
portfolio_deep = copy.deepcopy(portfolio) # deepcopy()递归复制所有层级
# 深拷贝创建完全独立的新对象,包括所有嵌套对象
# 无论多少层嵌套,都会被完全复制
# ==================== 修改原始数据 ====================
portfolio[0][2] = 1900.00 # 修改第一只股票的成本价:1850.00 -> 1900.00
# 注意:修改的是portfolio[0]这个内层列表的第3个元素
# ==================== 检查浅拷贝是否受影响 ====================
print("浅拷贝受影响:", portfolio_shallow[0][2]) # 输出:1900.00
# 浅拷贝的内层列表仍然指向原始对象
# 修改原始数据会影响浅拷贝,这可能导致意外的数据污染
# ==================== 检查深拷贝是否受影响 ====================
print("深拷贝不受影响:", portfolio_deep[0][2]) # 输出:1850.00
# 深拷贝是完全独立的副本
# 修改原始数据不会影响深拷贝,数据安全性高最佳实践:
- 简单列表(不含嵌套): 使用
list.copy()或切片[:] - 嵌套结构: 使用
copy.deepcopy() - 字典: 使用
dict.copy()(浅拷贝)或copy.deepcopy()(深拷贝)
2.8 本章小结
要点:
- 列表有序可变、支持异构元素,适合存储时间序列与持仓清单;
append()/remove()直接修改原列表 - 字典按键存取,查找平均 O(1);键必须是不可变类型(字符串、数值、元组可以,列表不可以)
- 元组不可变,适合固定配置与多值返回,可作字典键;命名元组
namedtuple提升可读性 d.keys()等返回动态视图对象,支持集合运算,但不能直接索引- 浅拷贝只复制外层容器,嵌套对象仍共享;要完全独立须用
copy.deepcopy()
易错点:
- 赋值
b = a不产生副本,两个名字指向同一个列表 remove()只删除第一个匹配元素,元素不存在时抛ValueError- 元组的不可变指结构不可变,元组内嵌的列表仍可执行
t[1].append(...) dict.values()不直接支持集合运算,需先转换为set
2.9 动手与思考
以下练习每题附参考答案(默认折叠)。请先独立完成并写下你的判断,再点开对照,最后上机验证。
输出预测:不运行代码,先写出下面代码的输出结果,再上机检验你的判断。
x = ['finance', 'risk management', '金融风险管理', 8.88] print(x[1]) print(x[1:3]) tup = ('finance', '风险管理', 2022, 88.88) print(tup[-1]) d = {'指数名称': '沪深300', '涨跌幅': 0.42} print(d['指数名称']) print('涨跌幅' in d)参考答案(先写下你的预测再点开)
解题思路:逐行推演。列表
x有 4 个元素,索引 0 到 3 依次为'finance'、'risk management'、'金融风险管理'、8.88。第 1 个print执行x[1],正向索引取第 2 个元素,得到risk management;第 2 个执行x[1:3],切片含头不含尾,取索引 1、2 两个元素,且列表切片仍返回列表,得到['risk management', '金融风险管理'];第 3 个执行tup[-1],负索引取元组最后一个元素,得到88.88;第 4 个执行d['指数名称'],按键取字典的值,得到沪深300;第 5 个执行'涨跌幅' in d,in对字典检查的是键是否存在,'涨跌幅'是键,返回True。# 验证脚本:逐行输出五个表达式的求值结果 x = ['finance', 'risk management', '金融风险管理', 8.88] # 定义混合类型列表 print(x[1]) # 正向索引取第2个元素 print(x[1:3]) # 切片取索引1、2的元素,结果仍是列表 tup = ('finance', '风险管理', 2022, 88.88) # 定义元组 print(tup[-1]) # 负索引取最后一个元素 d = {'指数名称': '沪深300', '涨跌幅': 0.42} # 定义字典 print(d['指数名称']) # 按键访问字典的值 print('涨跌幅' in d) # 检查键是否存在于字典中预期输出(本机 peter 环境实际运行结果,具体以平台运行结果为准):
risk management ['risk management', '金融风险管理'] 88.88 沪深300 True回扣本章:对应本章小结“要点”第 1—3 条——列表有序可索引、字典按键存取(
in判定的是键)、元组支持负索引访问。概念辨析:元组是不可变的,但对
t = (1, [2, 3])执行t[1].append(4)却能成功,这是否矛盾?为什么列表不能作字典的键,而元组可以?参考答案(点开前请先独立完成)
解题思路:不矛盾。元组的“不可变”指结构不可变:元组中保存的是各元素的引用,引用的个数(长度)和每个位置指向哪个对象不能改变,即不能执行
t[1] = [9]这类重新绑定。但t[1]指向的列表对象本身是可变的,t[1].append(4)修改的是那个列表的内部内容,元组里存的引用并没有变,因此操作合法——运行后t变为(1, [2, 3, 4]),元组长度仍是 2。列表不能作字典的键,根源在哈希机制:字典靠hash(key)定位存储桶,可变对象一旦内容变化,哈希值就会随之改变,先前存进去的键就会“找不到”,因此 Python 规定键必须可哈希,而列表不可哈希(本机实测hash((1, [2, 3]))抛出TypeError: unhashable type: 'list')。元组不可变,内容固定、哈希值稳定,因此可以作键;但前提是其内部元素也都可哈希——像(1, [2, 3])这种内嵌列表的元组同样不可哈希,也不能作键。回扣本章:对应本章小结“易错点”第 3 条(元组的不可变指结构不可变,内嵌列表仍可修改)与“要点”第 2 条(字典键必须是不可变类型)。
动手验证:对嵌套持仓列表
port = [['600519.SH', 100, 1850.00], ['000858.SZ', 200, 85.50]],分别用port.copy()与copy.deepcopy(port)生成副本后,将port[0][1]改为300。输出两份副本的port[0][1],并解释结果差异。参考答案(点开前请先独立完成)
解题思路:
port.copy()是浅拷贝,只复制外层列表,副本里的元素仍是原内层列表的引用,因此修改port[0][1](即原第一行内层列表的第 2 个元素)后,浅拷贝副本读到的是同一个内层列表,值变为300;copy.deepcopy(port)递归复制了所有层级,深拷贝副本的内层列表是全新对象,不受原数据修改影响,仍读到100。这说明对嵌套结构(如持仓清单)做副本时必须用深拷贝才能保证数据独立。# 验证脚本:对比浅拷贝与深拷贝在嵌套结构修改后的表现 import copy # 导入copy模块,提供deepcopy深拷贝 port = [['600519.SH', 100, 1850.00], ['000858.SZ', 200, 85.50]] # 嵌套持仓列表 shallow_port = port.copy() # 浅拷贝:只复制外层列表 deep_port = copy.deepcopy(port) # 深拷贝:递归复制所有层级 port[0][1] = 300 # 修改原数据第一行的持仓数量 print('浅拷贝副本:', shallow_port[0][1]) # 内层列表共享,读到修改后的300 print('深拷贝副本:', deep_port[0][1]) # 完全独立,仍读到100预期输出(本机 peter 环境实际运行结果,具体以平台运行结果为准):
浅拷贝副本: 300 深拷贝副本: 100回扣本章:对应本章小结“要点”第 5 条与“易错点”第 1 条——浅拷贝只复制外层容器、嵌套对象仍共享,要完全独立须用
copy.deepcopy()。变式任务(平台任务二、三同型改造):仿照平台任务二,构建”上证50”指数信息字典(指数名称
'上证50'、证券代码'000016'、交易日期'2022-09-14'、涨跌幅-0.15)并输出;然后把'涨跌幅'更新为0.28、新增键'成交额'(值123456789.0)后再次输出。再仿照任务三,对元组tup2 = ('python', '数据分析', 2023, 66.66)分别输出tup2[0:2]与tup2[::-1]。参考答案(点开前请先独立完成)
解题思路:字典部分按平台任务二的结构创建
dict2并整体输出;更新已有键直接对dict2['涨跌幅']赋值,新增键值对只需对不存在的键赋值(dict2['成交额'] = ...),两者都不需要事先声明,改完再次整体输出即可对照前后差异(Python 3.7+ 字典保持插入顺序,新增的'成交额'排在末尾)。元组部分:tup2[0:2]切片含头不含尾,取索引 0、1 两个元素,结果仍是元组;tup2[::-1]步长为 -1,从末尾倒序取全部元素,实现元组反转。# 变式程序:上证50指数信息字典的创建、更新与元组切片反转 dict2 = {'指数名称': '上证50', '证券代码': '000016', '交易日期': '2022-09-14', '涨跌幅': -0.15} # 创建上证50指数信息字典 print(dict2) # 输出初始字典 dict2['涨跌幅'] = 0.28 # 更新已有键的值 dict2['成交额'] = 123456789.0 # 新增键值对(键不存在即新增) print(dict2) # 再次输出,对照更新与新增后的字典 tup2 = ('python', '数据分析', 2023, 66.66) # 定义元组tup2 print(tup2[0:2]) # 切片取索引0、1的元素 print(tup2[::-1]) # 步长-1倒序取全部元素,实现反转预期输出(本机 peter 环境实际运行结果,具体以平台运行结果为准):
{'指数名称': '上证50', '证券代码': '000016', '交易日期': '2022-09-14', '涨跌幅': -0.15} {'指数名称': '上证50', '证券代码': '000016', '交易日期': '2022-09-14', '涨跌幅': 0.28, '成交额': 123456789.0} ('python', '数据分析') (66.66, 2023, '数据分析', 'python')注意:以上为本题变式的独立代码;列表 2.3 与 列表 2.6 对应平台任务的原始代码块仍须原样输入教学平台,不要用本变式替换。
回扣本章:对应本章小结“要点”第 2 条(字典按键存取,对已有键赋值即更新、对新键赋值即新增)与第 3 条(元组支持索引与切片,切片结果仍是元组)。